Traditional software diagnostic tools typically operate on a live, running process or on saved process state. For example, a live debugger runs on an executing process. A debugger that executes on saved process state does not attach to an executing process and operates by processing a process dump file or historical log files collected while the process being debugged executes. This type of debugger executes separately from the process being debugged, typically sometime after the process being debugged is done executing. Debugging a live process provides little or no historical context about how a process reached its current state. Debugging process dump files and/or log files is typically time consuming and iterative.